package cn.adkii.base.demo.proxy;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;

/**
 * @author malingdi
 * @description cglib动态代理 基于类的动态代理，不需要被代理的类实现接口，可以使用Enhancer类完成某个类进行动态代理
 * @date 2023/11/22 17:01
 */
public class CglibProxyDemo {

    public static void main(String[] args) {
        // 1.创建被代理对象
        Actor actor = new Actor();
        // 2. 使用cglib的enhancer类创建代理对象
        Actor proxyActor = (Actor) Enhancer.create(Actor.class, (MethodInterceptor) (o, method, objects, methodProxy) -> {
            Object result = null;
            if ("sing".equals(method.getName())){
                System.out.println("cglib开始代理收费了啊");
                result = method.invoke(actor, objects);
                System.out.println("结束退场了");
            }else {
                System.out.println("cglib开始清理地板了");
                result = method.invoke(actor, objects);
                System.out.println("舞蹈结束，快走吧");
            }
            return result;
        });
        proxyActor.dance("小可爱");
        proxyActor.sing("小淘气");
    }
}
